package com.aaa.utils;

import cn.hutool.core.io.file.FileReader;
import cn.hutool.core.io.file.FileWriter;
import cn.hutool.json.JSONUtil;

import java.io.*;
import java.util.List;
import java.util.Map;

/**
 * @author ：Teacher陈（86521760@qq.com）
 * @date ：Created in 2022/7/20 9:02
 * @description：我的工具箱
 * @modified By：
 * @version: 1.0
 */
public class MyTools {
    /**
     * @create by: Teacher陈（86521760@qq.com）
     * @description:校验：源文件不存在，不拷贝，源文件是目录不拷贝，
     * 目标文件存在，不拷贝。
     * @create time: 2022/7/20 9:04
     * @param source 源文件
     * @param target  目标文件
     * @return void
     */
    public static void copyFile(String source,String target){
        //实例化源文件
        File sourceFile = new File(source);
        //实例化目标文件
        File targetFile = new File(target);
        if(!sourceFile.exists()){
            System.out.println("源文件不存在");
            return;
        }
        if(sourceFile.isDirectory()){
            System.out.println("源文件是文件夹，不允许拷贝");
            return;
        }
        if(targetFile.exists()){
            System.out.println("目标文件，已经存在，不允许拷贝！");
            return;
        }

        //读取源文件的内容
        FileInputStream fileInputStream = null;
        BufferedInputStream bufferedInputStream=null;
        FileOutputStream fileOutputStream = null;
        BufferedOutputStream bufferedOutputStream= null;
        try {
            fileInputStream = new FileInputStream(sourceFile);
            bufferedInputStream= new BufferedInputStream(fileInputStream);
            //实例化输出流对象
            fileOutputStream = new FileOutputStream(targetFile);
            bufferedOutputStream = new BufferedOutputStream(fileOutputStream);

            byte[] bytes = new byte[2048];
            int count = 0;

            while ((count = bufferedInputStream.read(bytes)) != -1) {
                bufferedOutputStream.write(bytes, 0, count);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                //刷新缓冲区
                bufferedOutputStream.flush();
                //关闭流
                bufferedOutputStream.close();
                bufferedInputStream.close();
                fileOutputStream.close();
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }
    /**
     * @create by: Teacher陈（86521760@qq.com）
     * @description: 保存java几何数据到json文件中
     * @create time: 2022/7/29 9:27
     * @param mapList
     * @param filePath
     * @return void
     */
    public static void saveObjectToJsonFile(List<Map<String,Object>> mapList,String filePath){
        String jsonStr = JSONUtil.toJsonStr(mapList);
        //保存json字符串到文件中
        cn.hutool.core.io.file.FileWriter fileWriter = new FileWriter(filePath);
        fileWriter.write(jsonStr);
    }
    /**
     * @create by: Teacher陈（86521760@qq.com）
     * @description: 从json文件中获取java对象
     * @create time: 2022/7/29 9:30
     * @param filePath
     * @return List
     */
    public static List<Map> getObjectFromJsonFile(String filePath){
        FileReader fileReader = new FileReader(filePath);
        //获取json字符串
        String jsonStr = fileReader.readString();
        //将json字符串转换成java对象
        List<Map> mapList = JSONUtil.toList(jsonStr, Map.class);
        return  mapList;
    }
}
